// groupnpc.txt
// Exactly like basicnpc, with one difference. When it first spots a foe, sends
// an alert message to everyone in its group. Good for when you have a band of 
// monsters you don't want the party to be able to pick off one at a time.
// Memory Cells:
//   Cell 0 - How creature moves.
//     0 - If 0, wander randomly. 
//     1 - Stands still until a target appears.
//     2 - Completely immobile, even if target appears.
//   Cell 1,2 - Stuff done flag. If both 0, nothing. Otherwise when this 
//     is killed, set to 1. (Example: If cell 1 is 3 and cell 2 is 5, when
//     creature is killed, sets SDF(3,5) to 1.)
//   Cell 3 - Dialogue node to start with if talked to. if left at 0, this
//     character doesn't talk.

begincreaturescript;

variables;

short i,target;
short i_gave_alert = 0;
short last_abil_time,remark,r1;

body;

beginstate INIT_STATE;
	if (get_memory_cell(0) == 2)
		set_mobility(ME,0);
	break;

beginstate DEAD_STATE;

	message_dialog("The Chief is heavily damaged.  He stares at you in confusion.  _Why strongarm man betray me...?_","The Goblin Chief falls over.   You expect him to drop the Aquos Gem, but unfortunately, no such item is produced.  What he does drop, however, is a key.");
	message_dialog("Remembering the wounds on Wihcaser's body, you take a quick glance at the chief's weapon.  What you see is surprising.  It is an axe of extremely high quality.","The goblins couldn't have made it.  Perhaps somebody in your tribe will know something about why a goblin has it.  Regardless, it's too thin to have killed Wihcaser.  If the goblins didn't, who did?");
	set_flag(20,1,1);
	change_spec_item(1,1);

break;

beginstate START_STATE; 
	// if I have a target for some reason, go attack it
	if (target_ok()) {
		if (dist_to_char(get_target()) <= 16)
			set_state(3);
			else set_target(ME,-1);
		}
	
	// Look for a target, attack it if visible
	if (select_target(ME,8,0)) {
		do_attack();
		set_state(3);
		}
		
	// Have I been hit? Strike back!
	if (who_hit_me() >= 0) {
		set_target(ME,who_hit_me());
		do_attack();
		set_state(3);
		}
		
	// Otherwise, just peacefully move around. Go back to start, if I'm too far
	// from where I started.
	if (my_dist_from_start() >= 6) {
		if (get_ran(1,1,100) < 40) 
			return_to_start(ME,1);
		}
		else if (get_memory_cell(0) == 0) {
			fidget(ME,25);
			}

	// if we're in combat and the above didn't give me anything to do, just
	// stop now. Otherwise, game will keep running script, and that eats up CPU time.
	if (am_i_doing_action() == FALSE)
		end_combat_turn();
break;

beginstate 3; // attacking

	if(party_can_see_loc(my_loc_x(),my_loc_y()) == 1 && remark == 0){
		message_dialog("The warrior before you is much stronger than others you have faced thusfar.  He seems angry, strong, and bears a fearsome axe.","_Me lead tribe!  Strongarm man's warriors come here to kill me, but I kill them!  You die now!_");
		remark = 1;
	}

	if ((what_group_in(ME) > 0) && (i_gave_alert == 0)) {
		alert_char(1000 + what_group_in(ME));
		i_gave_alert = 1;
		}
	if (target_ok() == FALSE)
		set_state(START_STATE);

	if ((tick_difference(last_abil_time,get_current_tick()) >= 1) && (get_ran(1,0,1) == 0) && (can_see_char(1000))) {
	  	r1 = get_ran(1,0,2);
	  	if (r1 == 0) {
			print_named_str(ME,"fires a draining beam.");
			put_jagged_zap(my_loc_x(),my_loc_y(),char_loc_x(get_target()),
				char_loc_y(get_target()),3);
			run_animation_sound(46);
			set_char_status(get_target(),1,-10,0,1);
	  		}
	  	if (r1 == 1) {
			print_named_str(ME,"fires a weakening beam.");
			put_jagged_zap(my_loc_x(),my_loc_y(),char_loc_x(get_target()),
				char_loc_y(get_target()),3);
			run_animation_sound(65);
			set_char_status(get_target(),2,-10,0,1);
	  		}
	  	if (r1 == 2) {
			print_named_str(ME,"fires a slowing beam.");
			put_jagged_zap(my_loc_x(),my_loc_y(),char_loc_x(get_target()),
				char_loc_y(get_target()),3);
			run_animation_sound(7);
			set_char_status(get_target(),3,-10,0,1);
	  		}
		last_abil_time = get_current_tick();
		}
	if ((tick_difference(last_abil_time,get_current_tick()) >= 3) && (can_see_char(1000))) {
	  	r1 = get_ran(1,0,2);
	  	if (r1 == 0) {
			print_named_str(ME,"is blessed.");
			put_sparkles_on_char(ME,2,10);
			run_animation_sound(4);
			set_char_status(ME,1,10,0,1);
	  		}
	  	if (r1 == 1) {
			print_named_str(ME,"is shielded.");
			put_sparkles_on_char(ME,4,10);
			run_animation_sound(4);
			set_char_status(ME,2,10,0,1);
	  		}
	  	if (r1 == 2) {
			print_named_str(ME,"speeds up.");
			put_sparkles_on_char(ME,6,10);
			run_animation_sound(12);
			set_char_status(ME,3,10,0,1);
	  		}
		last_abil_time = get_current_tick();
		}

	do_attack();
break;

beginstate TALKING_STATE;
	if (get_memory_cell(3) == 0) {
		print_str("Talking: It doesn't respond.");
		end();
		}
	begin_talk_mode(get_memory_cell(3));
break;